package br.uff.busuffweb.controller;

import br.uff.busuffweb.model.Circuito;
import br.uff.busuffweb.service.CircuitoService;
import br.uff.busuffweb.util.FabricaDeObjetos;
import java.util.ArrayList;
import java.util.List;
import java.util.logging.Level;
import java.util.logging.Logger;
import javax.annotation.ManagedBean;
import javax.enterprise.context.SessionScoped;
import javax.faces.model.ListDataModel;

/**
 *
 * @author jthiago
 */
@ManagedBean
@SessionScoped
public class CircuitoMB extends BaseMB {

    private CircuitoService circuitoService;
    private List<Circuito> lista;
    private Circuito circuitoCorrente;
    private ListDataModel listaDataModel;    

    public CircuitoMB() {
        try {
            circuitoService = (CircuitoService) FabricaDeObjetos.getObjetoUnico(CircuitoService.class);
        } catch (Exception ex) {
            Logger.getLogger(CircuitoMB.class.getName()).log(Level.SEVERE, null, ex);
        }
    }

    public String exibirTodos() {
        lista = circuitoService.getTodos();
        listaDataModel = new ListDataModel(lista);
        
        return "alunoExibirTodos";
    }

    //Método auxiliar
    private void getTurmas() {
//        circuitoCorrente = circuitoService.getPorIdComListaAlunoTurmas(circuitoCorrente.getId());
//
//        listaDataModel = new ListDataModel(circuitoCorrente.getListaAlunoTurma());
    }

    public String exibirDiscPelaExibirTodos() {
//        circuitoCorrente = (Aluno) listaDataModel.getRowData();
//        getTurmas();
        
        return "alunoExibirTurmas";
    }

    public String exibirTurmasPelaBusca() {
        getTurmas();
        
        return "alunoExibirTurmas";
    }

    public String editar() {
        circuitoCorrente = (Circuito) listaDataModel.getRowData();

        return "editarAluno";
    }

    public String editarPelaBusca() {
        return "editarAluno";
    }
    
    //Método auxiliar
    private String excluir() {
        circuitoService.removerCircuito(circuitoCorrente);
        
        return "alunoExcluido";
    }
    
    public String excluirPelaExibirTodos() {
        circuitoCorrente = (Circuito) listaDataModel.getRowData();
        
        return excluir();
    }
    
    public String excluirPelaBusca() {
        return excluir();
    }

    public String buscar() {
        circuitoCorrente = new Circuito();

        return "buscarAluno";
    }
    
    public String buscaPorId() {
        circuitoCorrente = circuitoService.getPorId(circuitoCorrente.getId());
        List listaAluno = new ArrayList();

        if (circuitoCorrente != null) {
            listaAluno.add(circuitoCorrente);
        }

        listaDataModel = new ListDataModel(listaAluno);

        return "alunoExibirTodos";
    }

    public String buscaPorNome() {
        lista = circuitoService.getPorNome(circuitoCorrente.getNome());
        listaDataModel = new ListDataModel(lista);

        return "alunoExibirTodos";
    }

    public String cadastrar() {
        circuitoCorrente = new Circuito();

        return "cadastrarAluno";
    }

    public String salvar() {
        circuitoService.inserir(circuitoCorrente);

        return "alunoSalvar";
    }

    public String salvarEdicao() {
//        circuitoService.setAlteracao(circuitoCorrente);
        
        return "alunoSalvarEdicao";
    }

    public String voltar() {
        circuitoCorrente = new Circuito();

        return "voltar";
    }

    public String voltarBusca() {
        circuitoCorrente = new Circuito();

        return "alunoVoltarBusca";
    }

    public String voltarExibirTodos() {
        circuitoCorrente = new Circuito();

        return "alunoVoltarExibirTodos";
    }

    public List<Circuito> getLista() {
        return lista;
    }

    public void setLista(List<Circuito> lista) {
        this.lista = lista;
    }

    public Circuito getCircuitoCorrente() {
        return circuitoCorrente;
    }

    public void setCircuitoCorrente(Circuito circuitoCorrente) {
        this.circuitoCorrente = circuitoCorrente;
    }

    public ListDataModel getListaDataModel() {
        return listaDataModel;
    }

    public void setListaDataModel(ListDataModel listaDataModel) {
        this.listaDataModel = listaDataModel;
    }
}
